From 2b95d1a34ed7cd70ea3eaaa9b7d8add200b5a9d2 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 22 Jan 2014 18:48:45 -0500 Subject: [PATCH] Introduce API to get the preferred visual Unless GDK_RGBA=0 is set, this will be the RGBA visual. The new function is called gdk_screen_get_preferred_visual(). https://bugzilla.gnome.org/show_bug.cgi?id=630217 --- docs/reference/gdk/gdk3-sections.txt | 1 + docs/reference/gtk/running.sgml | 9 +++++++++ gdk/gdkscreen.c | 30 ++++++++++++++++++++++++++++ gdk/gdkscreen.h | 2 ++ gdk/gdkscreenprivate.h | 1 + gtk/gtkwidget.c | 9 +++++++-- 6 files changed, 50 insertions(+), 2 deletions(-) diff --git a/docs/reference/gdk/gdk3-sections.txt b/docs/reference/gdk/gdk3-sections.txt index d23183a3dd..f3a35e5b77 100644 --- a/docs/reference/gdk/gdk3-sections.txt +++ b/docs/reference/gdk/gdk3-sections.txt @@ -195,6 +195,7 @@ GdkScreen gdk_screen_get_default gdk_screen_get_system_visual gdk_screen_get_rgba_visual +gdk_screen_get_preferred_visual gdk_screen_is_composited gdk_screen_get_root_window gdk_screen_get_display diff --git a/docs/reference/gtk/running.sgml b/docs/reference/gtk/running.sgml index 8065e194e8..c7d2d9bc9a 100644 --- a/docs/reference/gtk/running.sgml +++ b/docs/reference/gtk/running.sgml @@ -478,6 +478,15 @@ nevertheless. + + <envar>GDK_RGBA</envar> + + + Since 3.12, this environment variable can be used to prevent + using RGBA visuals on the X11 backend by setting GDK_RGBA=0. + + + <envar>XDG_DATA_HOME</envar>, <envar>XDG_DATA_DIRS</envar> diff --git a/gdk/gdkscreen.c b/gdk/gdkscreen.c index 743b850bd5..113d2a4052 100644 --- a/gdk/gdkscreen.c +++ b/gdk/gdkscreen.c @@ -912,6 +912,36 @@ gdk_screen_get_rgba_visual (GdkScreen *screen) return GDK_SCREEN_GET_CLASS (screen)->get_rgba_visual (screen); } +/** + * gdk_screen_get_preferred_visual: + * @screen: a #GdkScreen + * + * Returns the visual that is preferred when creating windows. + * + * This will be the visual returned by gdk_screen_get_rgba_visual() + * unless that is not available, or unless the environment + * variable GDK_RGBA is set to 0. + * + * Return value: (transfer none): the preferred visual to use + * for windows + * + * Since: 3.12 + */ +GdkVisual * +gdk_screen_get_preferred_visual (GdkScreen *screen) +{ + GdkVisual *visual; + + g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL); + + visual = gdk_screen_get_rgba_visual (screen); + + if (visual == NULL || g_strcmp0 (g_getenv ("GDK_RGBA"), "0") == 0) + visual = gdk_screen_get_system_visual (screen); + + return visual; +} + /** * gdk_screen_is_composited: * @screen: a #GdkScreen diff --git a/gdk/gdkscreen.h b/gdk/gdkscreen.h index dde5524fa4..57d613245b 100644 --- a/gdk/gdkscreen.h +++ b/gdk/gdkscreen.h @@ -45,6 +45,8 @@ GDK_AVAILABLE_IN_ALL GdkVisual * gdk_screen_get_system_visual (GdkScreen *screen); GDK_AVAILABLE_IN_ALL GdkVisual * gdk_screen_get_rgba_visual (GdkScreen *screen); +GDK_AVAILABLE_IN_3_12 +GdkVisual * gdk_screen_get_preferred_visual (GdkScreen *screen); GDK_AVAILABLE_IN_ALL gboolean gdk_screen_is_composited (GdkScreen *screen); diff --git a/gdk/gdkscreenprivate.h b/gdk/gdkscreenprivate.h index 23cf1bdae2..b73a0926f0 100644 --- a/gdk/gdkscreenprivate.h +++ b/gdk/gdkscreenprivate.h @@ -66,6 +66,7 @@ struct _GdkScreenClass GList * (* list_visuals) (GdkScreen *screen); GdkVisual * (* get_system_visual) (GdkScreen *screen); GdkVisual * (* get_rgba_visual) (GdkScreen *screen); + GdkVisual * (* get_preferred_visual) (GdkScreen *screen); gboolean (* is_composited) (GdkScreen *screen); gchar * (* make_display_name) (GdkScreen *screen); GdkWindow * (* get_active_window) (GdkScreen *screen); diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 29157c02f3..6deeb6e84f 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -10863,9 +10863,14 @@ gtk_widget_get_visual (GtkWidget *widget) g_warning ("Ignoring visual set on widget `%s' that is not on the correct screen.", gtk_widget_get_name (widget)); } - } - return gdk_screen_get_system_visual (screen); + visual = gdk_screen_get_rgba_visual (screen); + + if (visual == NULL || + g_strcmp0 (g_getenv ("GDK_RGBA"), "0") != 0) + visual = gdk_screen_get_system_visual (screen); + + return visual; } /** -- 2.30.2